package com.pap.rbac.agent.orgation;

import java.util.List;

import com.pap.base.service.IPapBaseService;
import com.pap.obj.vo.response.ResponseVO;
import com.pap.rbac.agent.orgation.dto.OrganizationTreeNodeVO;
import com.pap.rbac.orgation.auto.entity.Organization;

public interface IOrganizationAgent extends IPapBaseService<Organization>{

	/**
	 * 批量插入操作
	 * @param argList	插入实体
	 * @return
	 */
	int insertSelectiveList(List<Organization> argList);
	
	/**
	 * 组织机构树形结构，根据 license 获取
	 * @param clientLicenseId
	 * @param globalParentId 全局统一的默认顶层组织架构的编码为 -1
	 */
	List<OrganizationTreeNodeVO> organizationTreeJson(String clientLicenseId, String globalParentId);
	
	/**
	 * 检查当前操作的组织机构编码，对照新维护的上级组织机构，是否被循环依赖
	 * @param operaOrganizationId
	 * @param newParentOrganizationId
	 * @return
	 */
	Boolean checkTreeCircularDependency(String operaOrganizationId, String newParentOrganizationId);
	
	/**
	 * 组织机构更新操作,参数校验并且进行数据维护	pathIds pathCodes pathNames 三个字段的数据维护
	 * @return
	 */
	ResponseVO<Organization> updateAndCheckOrganization(Organization inputOrganization, String loginUserId);
	
	/**
	 * 维护当前组织机构节点下，包含的子集的组织机构的数据值,冗余字段的维护，
	 * pathIds pathCodes pathNames
	 * 请确保当前操作的 inputOrganizationId，对应的实体数据已经是最新的。 
	 * 
	 * 递归调用，维护完毕所有子类的path冗余字段
	 * @param inputOrganizationId
	 * @return
	 */
	ResponseVO<Organization> updateRecursionPathColumnOrganization(String inputOrganizationId);
}
